import Koa from 'koa';
import cors from '@koa/cors';
import bodyParser from 'koa-bodyparser';
import { logger } from './logger'; // 引入日志
import { createConnection } from 'typeorm';
import jwt from 'koa-jwt';
import 'reflect-metadata';

import { protectedRouter, unprotectedRouter } from './routes';
import { JWT_SECRET } from './constants';
// 初始化 Koa 应用实例
const app = new Koa();

createConnection()
  .then(() => {
    // 初始化koa应用实例
    const app = new Koa();
    // 注册中间件
    app.use(logger());  // 引入日志
    app.use(cors());
    app.use(bodyParser());
	
	// 无需 JWT Token 即可访问
	app.use(unprotectedRouter.routes()).use(unprotectedRouter.allowedMethods());

	// 注册 JWT 中间件
	app.use(jwt({ secret: JWT_SECRET }).unless({ method: 'GET' }));
	app.use(jwt({ secret: JWT_SECRET }).unless({ method: 'POST' }));
	app.use(jwt({ secret: JWT_SECRET }).unless({ method: 'PUT' }));
	app.use(jwt({ secret: JWT_SECRET }).unless({ method: 'DELETE' }));

	// 需要 JWT Token 才可访问
	app.use(protectedRouter.routes()).use(protectedRouter.allowedMethods());
	
	app.use(async (ctx, next) => {
	      try {
	        await next();
	      } catch (err) {
	        // 只返回 JSON 格式的响应
	        ctx.status = err.status || 500;
	        ctx.body = { message: err.message };
	      }
	    });
    // 运行服务器
    app.listen(3000);
  })
  .catch((err: string) => console.log('typeOrm connection error:', err));

